import router from '@/router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import pinia from '@/store'
import {useLoginStore} from "@/store/login";
import { ElMessage } from 'element-plus'

NProgress.configure({ showSpinner: false });
const loginStore = useLoginStore()

// 不用进行token检查的白名单路径数组
const whiteList = ['/home','/course']
// 路由加载前
router.beforeEach(async (to, from, next) => {
   // 在显示进度条
   NProgress.start()

  const token = loginStore.token
  // 如果token存在(已经登陆或前面登陆过)
  if (token) {
    const hasLogin = !!loginStore.name
    // 如果已经登陆直接放行
    if (hasLogin) {
      next()
    } else { // 如果还没有登陆
      try {
        // 异步请求获取用户信息(包含权限数据) ==> 动态注册用户的权限路由 => 当次跳转不可见
        await loginStore.getInfo()
        next(to) // 重新跳转去目标路由, 能看到动态添加的异步路由, 且不会丢失参数
        NProgress.done() // 结束进度条

      } catch (error: any) { // 如果请求处理过程中出错
       // let dialog= JSON.parse(localStorage.getItem('dialogFormVisible') as string)
        // dialog=true
        // 完成进度条
        NProgress.done()
      }
    }
  } else { // 没有token
    // 如果目标路径在白名单中(是不需要token的路径)
    if (whiteList.indexOf(to.path) !== -1) {
      // 放行
      next()
    } else {
      // 如果没在白名单中, 跳转到登陆路由携带原目标路径
      next(`/login?redirect=${to.path}`)
      // 完成进度条  当次跳转中断了, 要进行一个新的跳转了
      NProgress.done()
    }
  }
})

// 路由加载后
router.afterEach(() => {
	NProgress.done();
})
